/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controlador;

import com.logica.Administrativa;
import com.logica.Comercial;
import com.modelo.Ciudad;
import com.modelo.Comentario;
import com.modelo.Departamento;
import com.modelo.Inmueble;
import com.modelo.Multimedia;
import com.modelo.Reserva;
import com.modelo.Usuario;
import com.utilities.Consulta;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;


/**
 *
 * @author Seysame
 */
@Controller
@SessionAttributes
public class InmuebleControl {
 
 @Autowired  
 private Comercial comercial;
    
 @Autowired  
 private Administrativa administrativa; 
 
 
 
    @RequestMapping(value = "/registroInmueble.htm")
    public ModelAndView FormularioRegistrarInmueble() {
          ModelAndView mv = new ModelAndView("registroInmueble");
          mv.addObject("command", new Inmueble());
          LinkedHashMap<String, String> paises = administrativa.listarPaises();
          mv.addObject("paises", paises);
          LinkedHashMap<BigDecimal, String> ciudades = administrativa.listarCiudades();
          mv.addObject("ciudades", ciudades);
          LinkedHashMap<String, String> tipos = administrativa.listarTipos();
          mv.addObject("tipos", tipos);
          ArrayList<BigDecimal>precios= administrativa.listarPrecios();
          mv.addObject("precios",precios);
          ArrayList<BigDecimal>cantidad= administrativa.listarCantidad();
          mv.addObject("cantidad",cantidad);
          return mv;
        
    }
    
    @RequestMapping("/verificarReservaInmueble.htm")
    public ModelAndView verificarReserva(@RequestParam("data") String queryString, HttpSession session)
    {
        ModelAndView mv = new ModelAndView("verificarReservaInmueble");
        //asignar todos los valores al modelo de la vista aqui.
        //data=inmuebleId&numPersonas&fechaIni&fechaFinal
        String[] datos = queryString.split("&");
        Inmueble inmueble = new Inmueble();
        inmueble.setIdInmueble(Integer.parseInt(datos[0]));
        Inmueble temp = comercial.buscarInmueble(inmueble);
        session.setAttribute("inmueble", temp);
        mv.addObject("inmueble", temp);        
        session.setAttribute("inmuebleActual", temp);
        Reserva nuevaReserva = new Reserva();
        String[] fsi = datos[2].split("/");
        String[] fsf = datos[3].split("/");
        nuevaReserva.setFechaLlegada(new Date(Integer.parseInt(fsi[0]),Integer.parseInt(fsi[1]),Integer.parseInt(fsi[2])));
        nuevaReserva.setFechaSalida(new Date(Integer.parseInt(fsf[0]),Integer.parseInt(fsf[1]),Integer.parseInt(fsf[2])));
        nuevaReserva.setHuespedes(BigDecimal.valueOf(Double.parseDouble(datos[1])));
        session.setAttribute("nuevaReserva", nuevaReserva);
        
        return mv;
    }
      @RequestMapping(value = "/registroInmueble.htm", method = RequestMethod.POST)
    public ModelAndView registroInmueble(@ModelAttribute("registroInmueble") Inmueble inmueble,@RequestParam("city") BigDecimal ciudad, BindingResult result,HttpSession sesion) {
          ModelAndView mv = new ModelAndView("redirect:registroInmueble.htm");
       
        
         Usuario usu = (Usuario)sesion.getAttribute("usuario"); 
         Ciudad temporal = new Ciudad();
         temporal.setIdCiudad(ciudad);
         inmueble.setCiudad(temporal);
//         Usuario dueño = new Usuario();
//         dueño.setIdUsuario(26);
//         inmueble.setUsuario(dueño);
         inmueble.setUsuario(usu);
         Inmueble registrado = comercial.registrarInmueble(inmueble);



//if(!(rutaFoto1.isEmpty()|| rutaFoto1.getSize()==0)){
//     MultipartFile filea = rutaFoto1;
//     
//         Multimedia multi = new Multimedia();
//         multi.setContenido(filea.getOriginalFilename());
//         multi.setTipo("imagen");
//         multi.setInmueble(registrado);
//         boolean resultado = comercial.guardarRutaMultimedia(filea);
//         Multimedia media = comercial.registrarMultimedia(multi);
//         
//         
//     }
//    
// 
 return mv;
        //return "redirect:registroInmueble.htm";
 

    // return "redirect:index.htm";
    }
      @RequestMapping(value = "/consultaInmueble.htm", method = RequestMethod.POST)
    public ModelAndView consultaInmueble(@ModelAttribute("consultaInmueble") Consulta consulta,BindingResult result) {
      
           ModelAndView mv = new ModelAndView("listadoInmuebles");
         
           String busqueda = consulta.getBusqueda();
           String tipo = consulta.getTipo();
          
           if(tipo.equals("Ciudad")){
               Ciudad temp = new Ciudad();
               temp.setNombre(busqueda);
               List<Ciudad> ciudades = administrativa.listarCiudadesPorNombre(temp);
             
               HashSet<Inmueble>inmuebles = new HashSet<Inmueble>();
               for(int i=0;i<ciudades.size();i++){
               List<Inmueble>place = comercial.buscarInmueblePorCiudad(ciudades.get(i));
               inmuebles.addAll(place);
               }
              
              mv.addObject("inmuebles", inmuebles);
               
           
           }
           
           if(tipo.equals("Titulo")){
               
               Inmueble temp = new Inmueble();
               temp.setTitulo(busqueda);
               List<Inmueble>listado = comercial.listarInmueblePorTitulo(temp);
               mv.addObject("inmuebles", listado);
           
           }
           
           
     
        
          return mv;
          
      }  
      
    @RequestMapping(value = "/consultaInmueble.htm")
    public ModelAndView consultaInmueble() {
        ModelAndView mv = new ModelAndView("consultaInmueble");
          mv.addObject("command", new Consulta());
          return mv;
         
          
         
      }  
    
    
    @RequestMapping("/perfilInmueble.htm")
    public ModelAndView perfilInmueble(@RequestParam("code") Integer id_inmueble, HttpSession session )
    {
       ModelAndView mv = new ModelAndView("perfilInmueble");
       
      Inmueble inmueble = new Inmueble();
      inmueble.setIdInmueble(id_inmueble);
      Inmueble temp = comercial.buscarInmueble(inmueble);
      session.setAttribute("inmueble", temp);
      mv.addObject("inmueble", temp);
      session.setAttribute("inmuebleActual", temp);
      mv.addObject("servicios", temp.getServicios());
      List<Multimedia>list = new ArrayList<Multimedia>();
      Set<Multimedia>listado= temp.getMultimedias();
      Iterator iterador = listado.iterator();
      while(iterador.hasNext()){
          Multimedia multimedia = (Multimedia)iterador.next();
          if(multimedia.getTipo().equalsIgnoreCase("video")){
              
          mv.addObject("video",multimedia.getContenido());
          
      }else{
     
          list.add(multimedia);
      }
      
      
      }
      mv.addObject("imagenes",list);
    
      
      
        return mv;
    }
      
 
 
 
 
// @RequestMapping(value = "/listadoInmuebles.htm")
//    public ModelAndView listarInmueble() {
//        ModelAndView mv = new ModelAndView("listadoInmuebles");
//        List result = comercial.listarInmuebles();
//        mv.addObject("inmuebles", result);
//        return mv;
//    }
 

    public Comercial getComercial() {
        return comercial;
    }

    public void setComercial(Comercial comercial) {
        this.comercial = comercial;
    }

    public Administrativa getAdministrativa() {
        return administrativa;
    }

    public void setAdministrativa(Administrativa administrativa) {
        this.administrativa = administrativa;
    }
       
 
}
